home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / dev / src / wangisrc.lha / wangi / z / CNode / cnode.c < prev    next >
C/C++ Source or Header  |  1995-12-11  |  4KB  |  175 lines

  1. #include "gst.c"
  2.  
  3. /* Libraries used, don't auto open them SAS/C :) */
  4. struct Library *NodelistBase = NULL;
  5.  
  6. #define pchar(X) FPutC(Output(), X)
  7.  
  8. void pstr(STRPTR spacerep, STRPTR s)
  9. {
  10.     for( ; *s != '\0'; ++s )
  11.         if( *s != ' ' )
  12.         {
  13.             if( isalnum(*s) )
  14.                 FPutC(Output(), tolower(*s));
  15.         }
  16.         else
  17.             FPuts(Output(), spacerep);
  18. }
  19.  
  20.  
  21. int main(int argc, char **argv)
  22. {
  23.     int ret = RETURN_FAIL;
  24.     
  25.     /* Open libraries */
  26.     if( (NodelistBase = OpenLibrary(TRAPLIST_NAME, TRAPLIST_VER)) &&
  27.         (DOSBase->dl_lib.lib_Version >= 36) ) 
  28.     {
  29.         /* Parse arguments */
  30.         struct RDArgs *rda;
  31.         #define DEF_NODELIST "Nodelist:"
  32.         #define TEMPLATE "FQFA/A,INS=INTERNETSTYLE/S,USER/K,DOMAIN/K,NODELIST/K"
  33.         #define OPT_FQFA 0
  34.         #define OPT_INS 1
  35.         #define OPT_USER 2
  36.         #define OPT_DOMAIN 3
  37.         #define OPT_NODELIST 4
  38.         #define OPT_MAX 5
  39.         STRPTR args[OPT_MAX] = {0, 0, 0, 0, DEF_NODELIST};
  40.  
  41.         if( rda = ReadArgs(TEMPLATE, (LONG *)&args, NULL) ) 
  42.         {
  43.             NodeList nl;
  44.             
  45.             /* Open nodelist */
  46.             if( nl = NLOpen(args[OPT_NODELIST], 0) )
  47.             {
  48.                 Addr *addr, *work;
  49.  
  50.                 if( (addr = AllocVec(sizeof(Addr), MEMF_CLEAR)) &&
  51.                     (work = AllocVec(sizeof(Addr), MEMF_CLEAR)) )
  52.                 {
  53.  
  54.                     if( !(NLParseAddr(addr, args[OPT_FQFA], NULL)) )
  55.                     {
  56.                         NodeDesc *nd;
  57.                         
  58.                         work->Zone = addr->Zone;
  59.                         
  60.                         if( args[OPT_INS] )
  61.                         {
  62.                             if( args[OPT_USER] )
  63.                             {
  64.                                 pstr(".", args[OPT_USER]);
  65.                                 pchar('@');
  66.                             }
  67.                                 
  68.                             work->Net = addr->Net;
  69.                             work->Node = addr->Node;
  70.                             work->Point = addr->Point;
  71.                             
  72.                             if( addr->Point )
  73.                             {
  74.                                 work->Point = addr->Point;
  75.                                 
  76.                                 if( nd = NLIndexFind(nl, work, NL_VERBATIM) )
  77.                                 {
  78.                                     pstr("", nd->System);
  79.                                     NLFreeNode(nd);
  80.                                 } else
  81.                                     Printf("%ld", addr->Point);
  82.                                 pchar('.');
  83.                             }
  84.                             
  85.                             work->Point = 0;
  86.                             if( nd = NLIndexFind(nl, work, NL_VERBATIM) )
  87.                             {
  88.                                 pstr("", nd->System);
  89.                                 NLFreeNode(nd);
  90.                             } else
  91.                                 Printf("%ld", addr->Node);
  92.                             pchar('.');
  93.                             
  94.                             work->Node = 0;
  95.                             if( nd = NLIndexFind(nl, work, NL_VERBATIM) )
  96.                             {
  97.                                 pstr("", nd->System);
  98.                                 NLFreeNode(nd);
  99.                             } else
  100.                                 Printf("%ld", addr->Net);
  101.                             pchar('.');
  102.                             
  103.                             work->Net = work->Zone;
  104.                             if( nd = NLIndexFind(nl, work, NL_VERBATIM) )
  105.                             {
  106.                                 pstr("", nd->System);
  107.                                 NLFreeNode(nd);
  108.                             } else
  109.                                 Printf("%ld", addr->Net);
  110.                             
  111.                             if( args[OPT_DOMAIN] )
  112.                             {
  113.                                 pchar('.');
  114.                                 FPuts(Output(), args[OPT_DOMAIN]);
  115.                             }
  116.                             
  117.                         } else
  118.                         {
  119.                             work->Net = addr->Zone;
  120.                             if( nd = NLIndexFind(nl, work, NL_VERBATIM) )
  121.                             {
  122.                                 pstr("", nd->System);
  123.                                 NLFreeNode(nd);
  124.                             } else
  125.                                 Printf("%ld", addr->Zone);
  126.                         
  127.                             pchar(':');
  128.                             work->Net = addr->Net;
  129.                             if( nd = NLIndexFind(nl, work, NL_VERBATIM) )
  130.                             {
  131.                                 pstr("", nd->System);
  132.                                 NLFreeNode(nd);
  133.                             } else
  134.                             Printf("%ld", addr->Net);
  135.  
  136.                         
  137.                             pchar('/');
  138.                             work->Node = addr->Node;
  139.                             if( nd = NLIndexFind(nl, work, NL_VERBATIM) )
  140.                             {
  141.                                 pstr("", nd->System);
  142.                                 NLFreeNode(nd);
  143.                             } else
  144.                                 Printf("%ld", addr->Node);
  145.  
  146.                             if( addr->Point )
  147.                             {
  148.                                 work->Point = addr->Point;
  149.                                 pchar('.');
  150.                                 
  151.                                 if( nd = NLIndexFind(nl, work, NL_VERBATIM) )
  152.                                 {
  153.                                     pstr("", nd->System);
  154.                                     NLFreeNode(nd);
  155.                                 } else
  156.                                     Printf("%ld", addr->Point);
  157.                             }
  158.                         }
  159.                         
  160.                         pchar('\n');
  161.                         
  162.                         ret = 0;
  163.                     }
  164.                     FreeVec(addr);
  165.                 }
  166.                 NLClose(nl);
  167.             }
  168.             FreeArgs(rda);
  169.         } else
  170.             PrintFault(IoErr(), "CNode");
  171.         CloseLibrary(NodelistBase);
  172.     }
  173.     return ret;
  174. }
  175.